const fs = require('fs');
const path = require('path');
const sharp = require('sharp');

// 水印图片路径
const watermarkPath = path.join(__dirname, 'watermark.png');

// 检查水印图片是否存在
if (!fs.existsSync(watermarkPath)) {
    console.error('水印图片不存在:', watermarkPath);
    return;
}

// 图片文件夹路径
const imageFolderPath = path.join(__dirname, 'images');

// 输出文件夹路径
const outputFolderPath = path.join(__dirname, 'output');

// 确保输出文件夹存在
if (!fs.existsSync(outputFolderPath)) {
    fs.mkdirSync(outputFolderPath);
}

// 读取文件夹中的所有图片
fs.readdir(imageFolderPath, (err, files) => {
    if (err) {
        console.error('无法读取文件夹:', err);
        return;
    }

    files.forEach((file) => {
        const imagePath = path.join(imageFolderPath, file);
        const outputPath = path.join(outputFolderPath, file);

        // 检查文件是否为图片
        if (/\.(jpg|jpeg|png|gif)$/i.test(file)) {
            // 获取目标图片的尺寸
            sharp(imagePath)
                .metadata()
                .then((metadata) => {
                    const imageWidth = metadata.width;
                    const imageHeight = metadata.height;

                    // 计算水印图片的尺寸（目标图片的 50%）
                    const watermarkWidth = Math.round(imageWidth * 0.5); // 取整
                    const watermarkHeight = Math.round(imageHeight * 0.5); // 取整

                    // 缩放水印图片以适应目标图片
                    return sharp(watermarkPath)
                        .resize({
                            width: watermarkWidth,
                            height: watermarkHeight,
                            fit: 'inside', // 保持水印图片的宽高比
                            withoutEnlargement: true, // 禁止放大水印图片
                        })
                        .toBuffer();
                })
                .then((watermarkBuffer) => {
                    // 添加水印
                    return sharp(imagePath)
                        .composite([{
                            input: watermarkBuffer,
                            gravity: 'southeast', // 水印位置，例如右下角
                        }])
                        .toFile(outputPath);
                })
                .then(() => {
                    console.log(`图片 ${file} 已添加水印并保存到 ${outputPath}`);
                })
                .catch((err) => {
                    console.error(`处理图片 ${file} 时出错:`, err);
                });
        } else {
            console.log(`跳过非图片文件: ${file}`);
        }
    });
});